[HEADING=2]NetworkSwitcher (.NET Framework 4.8, для Windows 7)[/HEADING]
Программа для Windows, которая переключает сеть между двумя адаптерами по их именам.
Есть консольная версия ([ICODE]SwitchAdapter.exe[/ICODE]) и версия с окном WPF ([ICODE]SwitchAdapterGui.exe[/ICODE]).

Это версия для [B].NET Framework 4.8[/B] (папка [ICODE]C#_Win7[/ICODE]). Она делает то же самое, что версия на .NET 10 (папка [ICODE]C#[/ICODE]), но не требует установки .NET Runtime: .NET Framework 4.8 встроен в Windows 10 (1903+) и Windows 11, а для Windows 7 SP1 ставится отдельно.

[HEADING=2]Что делает[/HEADING]
[LIST=1]
[*]Позволяет переключиться между двумя сетевыми адаптерами - один адаптер отключается, а второй включается. При повторном запуске программы происходит наоборот - первый адаптер включается, а второй отключается. Имена адаптеров читаются из [ICODE]adapters.json[/ICODE].
[*]Сбрасывает кэш DNS и показывает, какой адаптер теперь активен.
[/LIST]

[HEADING=2]Запуск (доступны 2 версии)[/HEADING]
[I]программу можно найти в папке [ICODE]./C#_Win7/publish/[/ICODE][/I]
[LIST]
[*]Консольная версия [ICODE]SwitchAdapter.exe[/ICODE] сразу переключает адаптеры.
[*]Оконная версия [ICODE]SwitchAdapterGui.exe[/ICODE] позволяет выбрать адаптеры в окне.
[/LIST]

[HEADING=2]GUI (SwitchAdapterGui.exe)[/HEADING]
[LIST]
[*]Два выпадающих списка с именами всех адаптеров. Выбор сразу сохраняется в [ICODE]adapters.json[/ICODE].
[*]Рамка вокруг списка: зелёная - адаптер включён (активен), красная - выключен или не найден.
[*]Рядом с каждым списком кнопка [B]Enable[/B]/[B]Disable[/B] - включает или выключает именно этот адаптер.
[*]Кнопка [B]Switch[/B] делает то же, что консольная версия: выключает включённый адаптер и включает другой.
[*]В строке состояния - какой адаптер сейчас активен (или сообщение об ошибке).
[*]Кнопка [B]Open Network settings[/B] открывает окно «Сетевые подключения» ([ICODE]ncpa.cpl[/ICODE]).
[/LIST]

[HEADING=2]Настройка консольной версии[/HEADING]
Файл [ICODE]adapters.json[/ICODE] лежит рядом с [ICODE]SwitchAdapter.exe[/ICODE] и [ICODE]SwitchAdapterGui.exe[/ICODE] (общий для обеих программ):
[CODE]
{
  "Adapter1": "Подключение по локальной сети",
  "Adapter2": "Беспроводное сетевое соединение 5"
}
[/CODE]
При запуске консольной программы будет создан файл [ICODE]adapter-names.txt[/ICODE]. Отсюда вы можете взять точные имена для вставки в настройки [ICODE]adapters.json[/ICODE]. В GUI имена выбираются из списка.

[LIST]
[*]Имена должны точно совпадать с именами в окне «Сетевые подключения» ([ICODE]ncpa.cpl[/ICODE]) - регистр и пробелы важны. Имя нужно брать не из имён под пиктограммой, а в свойствах подключения (они могут отличаться).
[*]Имена свойств ([ICODE]Adapter1[/ICODE], [ICODE]Adapter2[/ICODE]) регистрозависимы, комментарии в JSON не поддерживаются (в версии для .NET 10 - поддерживаются).
[/LIST]

[HEADING=2]Требования[/HEADING]
[LIST]
[*]Windows 7 SP1 или новее
[*][URL='https://dotnet.microsoft.com/ru-ru/download/dotnet-framework/net48'].NET Framework 4.8[/URL] (в Windows 10 1903+ и Windows 11 уже установлен)
[*]Права администратора
[/LIST]
Сборка AnyCPU: на 64-разрядной Windows программа работает как x64, на 32-разрядной - как x86 (отдельные сборки не нужны).

[HEADING=2]Сборка[/HEADING]
[LIST]
[*]Требуется [URL='https://dotnet.microsoft.com/ru-ru/download'].NET SDK[/URL] (10.0 или другой с поддержкой [ICODE]net48[/ICODE]) и пакет разработчика (targeting pack) .NET Framework 4.8. Если пакета разработчика нет, SDK скачает его при первом восстановлении проекта (NuGet-пакет [ICODE]Microsoft.NETFramework.ReferenceAssemblies[/ICODE], используется только при сборке и в программу не входит).
[*]Запустите [ICODE]build.bat[/ICODE] - он собирает консольную и оконную программы в папку [ICODE]publish[/ICODE] (там: [ICODE]SwitchAdapter.exe[/ICODE], [ICODE]SwitchAdapterGui.exe[/ICODE], общая [ICODE]NetworkSwitcher.Core.dll[/ICODE] и [ICODE]adapters.json[/ICODE])
[*]Для разработки откройте [ICODE]NetworkSwitcher.slnx[/ICODE] в Visual Studio 2026. При обычной сборке все проекты кладут результат в общую папку [ICODE]bin\<Configuration>\[/ICODE]. Программы требуют прав администратора (manifest), поэтому для отладки Visual Studio нужно запускать от администратора.
[/LIST]

[HEADING=2]Состояние адаптера[/HEADING]
Состояние берётся из WMI-свойства [ICODE]ConfigManagerErrorCode[/ICODE] (0 - включён, 22 - отключён), а не из [ICODE]NetEnabled[/ICODE]: [ICODE]NetEnabled[/ICODE] возвращает [ICODE]False[/ICODE] и для включённого адаптера без подключения к сети (например, Wi-Fi вне зоны действия).

[HEADING=2]Зависимости[/HEADING]
Сторонних NuGet-пакетов нет: используются только компоненты .NET Framework 4.8.
[LIST]
[*][ICODE]System.Management[/ICODE] - доступ к WMI ([ICODE]Win32_NetworkAdapter[/ICODE])
[*][ICODE]System.Runtime.Serialization[/ICODE] ([ICODE]DataContractJsonSerializer[/ICODE]) - чтение и запись [ICODE]adapters.json[/ICODE]
[*]WinAPI ([ICODE]dnsapi.dll[/ICODE]) - сброс кэша DNS
[/LIST]
Никакие встроенные утилиты Windows ([ICODE]netsh[/ICODE], [ICODE]wmic[/ICODE], [ICODE]ipconfig[/ICODE], PowerShell и т. п.) не запускаются.

[HEADING=2]Структура решения[/HEADING]
[LIST]
[*][ICODE]NetworkSwitcher.Core[/ICODE] - DLL с общим кодом: сетевые функции (WMI, сброс DNS) и чтение/запись [ICODE]adapters.json[/ICODE]
[*][ICODE]NetworkSwitcher.Console[/ICODE] - консольная программа [ICODE]SwitchAdapter.exe[/ICODE]
[*][ICODE]NetworkSwitcher.Wpf[/ICODE] - оконная программа [ICODE]SwitchAdapterGui.exe[/ICODE] (WPF)
[/LIST]

[HEADING=2]Другие реализации[/HEADING]
В комплекте несколько реализаций (на разных языках), которые делают одно и то же. Рекомендуется версия на C# ([ICODE]C#[/ICODE] - для .NET 10, [ICODE]C#_Win7[/ICODE] - для .NET Framework 4.8).
Скриптовые версии в отличие от C# запускают встроенные утилиты wmic, netsh, ipconfig.
